As computer networks have become faster and more reliable, the deployment of network storage servers in enterprise computing environments has become more widespread. In a typical enterprise computing environment, client systems such as computer workstations, database servers, web servers, and other application servers can access data stored remotely from the client systems, typically in one or more central locations. One or more computer networks, e.g., one or more local area networks (LANs) or wide area networks (WANs), connect the client systems to mass storage devices, such as disks, disposed at the central locations. Such centralized network data storage at storage servers facilitates the sharing of data among many geographically distributed client systems. Network data storage also enables information systems (IS) departments to use highly reliable (sometimes redundant) computer equipment to store their data.
In the typical storage system environment, specialized computers such as file servers, storage servers, storage appliances, etc. (referred to hereinafter as storage servers) located at the central locations make the data stored on the storage devices (e.g., disks) available to the client systems. For example, a storage server can have a monolithic architecture, in which network and data components are contained within a single device. Software miming on the storage servers and other software running on the client systems communicate according to well-known protocols, such as the Network File System (NFS) protocol, the Common Internet File System (CIFS) protocol, and the Direct Access File System (DAFS) protocol, to make the data stored on the storage devices appear to users and application programs as though the data were stored locally on the client systems. Each storage server makes data available to the client systems by presenting or exporting one or more storage objects (e.g., volumes) to the client systems. Each volume is configured to store data files, scripts, word processing documents, executable programs, and the like. From the perspective of a client system, each volume can appear to be a single storage device drive. However, each volume can represent the storage space in a single storage device, a redundant array of independent disks (RAID) or a RAID set, an aggregate of some or all of the storage space in a set of storage devices, or any other suitable set of storage space.
In addition, multiple storage servers can be arranged in a cluster configuration to form a single “cluster storage server system.” The cluster storage server system has a distributed architecture that includes a plurality of storage servers (referred to as “nodes”) interconnected by a switching fabric. Each storage server node typically includes a network module (an N-module), a disk module (a D-module), and a management module (an M-host). The N-module provides functionality that enables a respective node within the clustered system to connect to a client system over a computer network, the D-module provides functionality enabling the respective node to connect to one or more storage devices, and the M-host provides management functions for the clustered system. A switched virtualization layer is provided below the interface between the N-modules and the client systems, allowing the storage devices associated with the multiple nodes in the cluster configuration to be presented to the client systems as a single shared storage pool.
In a typical mode of operation, a client system transmits an NFS, CIFS, or DAFS access request for data to one of the storage server nodes within the clustered system. The access request typically includes a file handle for a data file stored in a specified volume. The N-module within the node that received the request extracts a volume identifier from the file handle, and uses the volume identifier to index a volume location database (VLDB) to obtain an identification of an aggregate storing the specified volume. The N-module then uses the aggregate identification to locate the D-module responsible for the aggregate, and transmits a request to the D-module for the data on the specified volume using an internal protocol. The D-module executes the request, and transmits, using the internal protocol, a response containing the requested volume data back to the N-module, which in turn transmits an NFS, CIFS, or DAFS response with the requested data to the client system. In this way, the N-modules can export, to the client systems, one or more volumes that are stored on aggregates accessible via the D-modules.
As described above, a storage server environment may comprise one or more storage servers connected with a plurality of client systems, the storage servers storing data on a plurality of storage devices for client systems. Each storage server executes a storage operating system for receiving data access requests (such as read or write requests) from the client systems and performing the access requests on the storage devices.
In a virtual storage server environment, a client system may be used as a host system that executes a host operating system and a plurality of virtual machines (VMs). Each virtual machine may comprise a guest operating system that is a virtualized storage operating system. The virtualized storage operating system may provide a simulated storage server to client systems for accessing data on the storage devices, the simulated storage server appearing as an actual storage server to the client systems. As such, a virtual machine that implements a virtualized storage operating system may be referred to as a “virtual storage server.”
The host system may comprise a pool of hardware and/or software resources that are shared by the plurality of virtual machines, each virtual machine being allocated a set of resources for exclusive use by the virtual machine. For example, each virtual machine may be allocated a particular number of processors and a particular amount of storage space in a local memory and/or a local storage device for use by the virtual machine. As such, the maximum number of virtual machines that can be hosted on the host system is limited by the amount of hardware and/or software resources of the host system.
A problem occurs, however, if a virtual machine is allocated resources of the host system but the virtual machine is not in use (is idle). In this situation, valuable resources of the host system are being wasted by the unused/idle virtual machine and there may not be enough resources to provision new virtual machines on the host system. Conventional methods of detecting idle virtual machines may include monitoring processor usage and storage device input/output (I/O) operations. However, the virtualized storage operating system may implement a “heartbeat” feature that periodically executes a message signal procedure that requires processor usage and I/O operations. The heartbeat feature is used by some storage operating systems in high availability systems to periodically register heartbeat signals to indicate that the storage server is still functional and online
In some cases, a virtual machine implementing a virtualized storage operating system may be idle except for the periodic execution of the heartbeat feature. In these cases, the virtual machine should still be considered idle as the virtual machine is otherwise not in use. However, conventional methods would not detect the virtual machine as idle since the virtual machine will still periodically require processor usage and I/O operations. As such, there is a need for a better way to detect idle virtual machines that implement a virtualized storage operating system (virtual storage server).